[アップデート] AWS CodeBuild がビルド失敗時に自動再試行出来るようになりました

[アップデート] AWS CodeBuild がビルド失敗時に自動再試行出来るようになりました

Clock Icon2024.10.28

いわさです。

What's New のほうでアナウンスが出ていないのですが AWS CodeBuild でビルドの自動再試行をしてくれるようになりました。
AWS CLI v1.35.15 から CodeBuild プロジェクトに対して「自動再試行回数の上限値」を設定出来るようになっています。

https://github.com/aws/aws-cli/commit/046c63603d0bf768da797fac263d0752c8a21fed#diff-6722580dc15a6fbddaa9468ca83fb8007826fcf57ad4eacdf83bf0af7accf28eR9

AWS 公式ドキュメントにも本件に関するページが追加されていまして、どうやら CodePipeline での使用や Webhook トリガーの場合は自動再試行が使えないみたいなのでご注意ください。
CodePipeline は別で自動リトライの仕組みがあるのでどうにかなりますが、Webhook はパラメータもあるので一度どこかでキューイングしてリトライの仕組みを実装したほうが良さそうだ。

https://docs.aws.amazon.com/codebuild/latest/userguide/auto-retry-build.html

自動再試行してくれるのはわかりましたが、実際の挙動イメージがちょっとつかなかったので実際に試してみました。
ビルドスペックの失敗したコマンドだけ再試行してくれるのかな。

2024.10.30 追記

アナウンスも出ていました。

https://aws.amazon.com/about-aws/whats-new/2024/10/aws-codebuild-retrying-builds-automatically/

自動再試行回数の設定方法

で、自動再試行の設定方法ですが、ビルドプロジェクト環境の「追加の設定」から設定出来ます。
次のエリアが追加されています。

04CF4877-9CF4-4FBC-BCF8-477E5825CE46.png

デフォルトは 0 になってます。リトライなしです。
設定値は 0 から 10 まで設定出来るようなので、リトライ 10 回が最大みたいです。

6CB6C60A-9C6C-4572-9E62-76CCB6E3818D_4_5005_c.jpeg

この設定は既存プロジェクトに対して設定出来ます。
環境の編集から設定しましょう。0 の場合は環境パネルに情報が表示されないようです。

68F62FE7-AF4D-4B6B-B6F3-BC7469F74761.png

リトライ回数を設定したら環境パネルに情報が表示されました。なるほど。

41C9C49C-A672-4D69-970C-FF32ED74FF0C.png

再試行の様子を観察してみる

ではビルドを意図的に失敗させてリトライの様子を見てみましょう。
適当なビルドスペックを作成し、最後に exit コマンドでエラーコードを返してみます。

7990BC6C-276B-456D-9137-529803B40798_4_5005_c.jpeg

まずはリトライ設定なしで試してみましょう。
良いですね、echo は正常に実行されて、その次の exit で失敗しました。

C07C363B-E4B3-4DE4-965F-10F8ACD61F11.png

ではビルドプロジェクトのリトライ回数を 5 回に設定して実行してみます。

DDA20BB4-BA9C-4BA7-911B-371A23AAE7BD_4_5005_c.jpeg

echo のあとに exit が 5~6 回実行されるのかな?と思いきや、ビルドログは同じでした。
ビルドスペックの実行内容が変わるわけではなくて、シンプルにビルドプロジェクトに対して追加のビルドが実行される形でした。

07E35C4A-B21D-47E0-A4BC-A0EAE4F0D8B3.png

ビルド番号 1 は先程単発で実行したもの、ビルド番号 2 が今回実行したものです。
その後に 5 回実行されていることが確認出来ますね。
注目したい点としては、ビルド実行時の送信者情報です。手動実行したものはマネジメントコンソールにサインインしている IAM ユーザー/ロールで実行されていますが、再試行についてはビルドプロジェクトのサービスロールですね。

さいごに

本日は AWS CodeBuild がビルド失敗時に自動再試行出来るようになったので使ってみました。

ユースケースとしては何でしょう。外部 API 呼び出しやスロットリングなどの関係でどうしてもたまにビルドが失敗してしまう可能性がある場合あると思うんですが、そういう時は再試行が妥当な対応だったりします。おそらくそういった時に設定するのが良い感じなのかな。メールのソフトバウンス的な。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.